.TH std::swap(std::optional) 3 "2024.06.10" "http://cppreference.com" "C++ Standard Libary"
.SH NAME
std::swap(std::optional) \- std::swap(std::optional)

.SH Synopsis
   Defined in header <optional>
   template< class T >

   void swap( std::optional<T>& lhs,                            \fI(since C++17)\fP
                                                                (constexpr since C++20)
              std::optional<T>& rhs ) noexcept(/* see below
   */);

   Overloads the std::swap algorithm for std::optional. Exchanges the state of lhs with
   that of rhs. Effectively calls lhs.swap(rhs).

   This overload participates in overload resolution only if
   std::is_move_constructible_v<T> and std::is_swappable_v<T> are both true.

.SH Parameters

   lhs, rhs - optional objects whose states to swap

.SH Return value

   \fI(none)\fP

.SH Exceptions

   noexcept specification:
   noexcept(noexcept(lhs.swap(rhs)))

.SH Example


// Run this code

 #include <iostream>
 #include <optional>
 #include <string>

 int main()
 {
     std::optional<std::string> a{"██████"}, b{"▒▒▒▒▒▒"};

     auto print = [&](auto const& s)
     {
         std::cout << s << "\\t"
                      "a = " << a.value_or("(null)") << "  "
                      "b = " << b.value_or("(null)") << '\\n';
     };

     print("Initially:");
     std::swap(a, b);
     print("swap(a, b):");
     a.reset();
     print("\\n""a.reset():");
     std::swap(a, b);
     print("swap(a, b):");
 }

.SH Output:

 Initially:   a = ██████  b = ▒▒▒▒▒▒
 swap(a, b):  a = ▒▒▒▒▒▒  b = ██████

 a.reset():   a = (null)  b = ██████
 swap(a, b):  a = ██████  b = (null)

   Defect reports

   The following behavior-changing defect reports were applied retroactively to
   previously published C++ standards.

     DR    Applied to              Behavior as published               Correct behavior
   P2231R1 C++20      swap was not constexpr while the required        made constexpr
                      operations can be constexpr in C++20

.SH See also

   swap exchanges the contents
        \fI(public member function)\fP

.SH Category:
     * conditionally noexcept
